

import 'dart:io';
import 'dart:isolate';

//单向的
void main() async{


  //ReceivePort 是一个在封装的Stream
  //Stream 只能监听一次
  //ReceivePort 接收端口，
  //c  一个文件一个fd
  ReceivePort receivePort = ReceivePort();
  //文件
  var sendPort = receivePort.sendPort;
  // receivePort.listen((message) {
  //   print("接受到数据：$message");
  //   if(message is SendPort){
  //     SendPort sendPort = message;
  //     sendPort.send("主线程给子线程发送消息.....");
  //   }
  // });

  //只有走勒Isolate.spawn才会构建一个线程资源
  Isolate.spawn(newThread,sendPort);
  
  SendPort first = await receivePort.first;// read
  print("主线程接收到子线程发送过来的数据：$first");

  first.send("hello!");

  receivePort.listen((message) {
    print("主线程接收到子线程发送过来的数据：$message");
  });

}

//新的isolate
void newThread(SendPort sendPort){
  sleep(Duration(seconds: 2));

  ReceivePort receivePort = ReceivePort();

  receivePort.listen((message) {
    print("子线程接收到主线程的消息：$message");
  });

  //通过传递过来的sendPort给主线程回消息
  // sendPort.send("这个是子线程给主线程回的消息！！！");
  //发送子线程的sendPort给主线程
  sendPort.send(receivePort.sendPort);


}